#ifndef LOGINHANDLER_H
#define LOGINHANDLER_H

#include "../httpserver/httprequesthandler.h"
#include "../httpserver/httprequest.h"
#include "../httpserver/httpresponse.h"
#include <QJsonDocument>
#include <QJsonObject>

using namespace stefanfrings;

class LoginHandler : public HttpRequestHandler {
    Q_OBJECT
    Q_DISABLE_COPY(LoginHandler)
public:
    LoginHandler(QObject* parent = nullptr) : HttpRequestHandler(parent) {}

    void service(HttpRequest& request, HttpResponse& response) override {
        // 1. 仅允许POST请求（登录需提交账号密码，用POST更安全）
        if (request.getMethod() != "POST") {
            sendJsonResponse(response, 405, "Method Not Allowed", "仅支持POST请求");
            return;
        }

        // 2. 获取请求参数（假设客户端通过表单或JSON提交账号密码）
        QByteArray username = request.getParameter("username");
        QByteArray password = request.getParameter("password");

        // 3. 验证参数是否为空
        if (username.isEmpty() || password.isEmpty()) {
            sendJsonResponse(response, 400, "Bad Request", "用户名或密码不能为空");
            return;
        }

        // 4. 模拟登录验证（实际项目中应连接数据库查询）
        bool loginSuccess = false;
        QString message;
        if (username == "admin" && password == "123456") { // 仅作示例，实际需加密验证
            loginSuccess = true;
            message = "登录成功";
        } else {
            message = "用户名或密码错误";
        }

        // 5. 返回登录结果（JSON格式）
        if (loginSuccess) {
            sendJsonResponse(response, 200, "OK", message, true);
        } else {
            sendJsonResponse(response, 401, "Unauthorized", message);
        }
    }

private:
    // 工具函数：发送JSON格式响应
    void sendJsonResponse(HttpResponse& response,
                         int statusCode,
                         const QString& statusText,
                         const QString& message,
                         bool success = false) {
        // 设置响应头（JSON格式）
        response.setStatus(statusCode, statusText.toUtf8());
        response.setHeader("Content-Type", "application/json; charset=UTF-8");

        // 构建JSON响应体
        QJsonObject json;
        json["success"] = success;
        json["message"] = message;
        if (success) {
            // 登录成功时可附加用户信息（示例）
            json["user"] = QJsonObject{
                {"username", "admin"},
                {"role", "admin"}
            };
        }

        // 发送响应
        QByteArray jsonData = QJsonDocument(json).toJson(QJsonDocument::Compact);
        response.write(jsonData, true);
    }
};

#endif // LOGINHANDLER_H
